import java.util.Stack;


public class GenerationConditionnelle implements GramConstants{

	
	private static MaP map;
	private int maxCond;
	private Stack<Integer> pileCond;
	
	/**
	 * Le constructeur de la classe GenerationConditionnelle
	 * @param _map Référence vers la machine à pile
	 */
	public GenerationConditionnelle(MaP _map) {
		map = _map;
		maxCond = 1;
		pileCond = new Stack<Integer>();
	}
	
	
	/**
	 * Génère le code d'ouverture d'une condition SI. Incrémente et empile le numéro d'étiquette.
	 */
	public void cond_si()
	{
		map.cond_si(maxCond);
		pileCond.push(maxCond);
		maxCond++;
	}

	/**
	 * Génère le code juste après le bloc de la condition ou lors de la lecture du Sinon
	 */
	public void cond_sinon(){
		map.cond_sinon(pileCond.peek());
	}
	
	/**
	 * Génère le code de fermeture d'une Condition. Dépile le numéro d'étiquette correspondant.
	 */
	public void cond_fsi() {
		map.cond_fsi(pileCond.pop());
	}
	
	/**
	 * Vérifie que le type de la Condition est bien booléen. Affiche une erreur le cas échéant.
	 * @param type la constante de type de la condition
	 */
	public void cond_exprBool(int type) {
		if(type != typeBool) {
			MsgErreur.getErreur(Gram.token.beginLine, "GenerationConditionnelle.cond_exprBool", "Condition incorrecte");
		}
	}
}
